package br.com.news.web;

import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.news.utils.database.beans.CategoriaBean;
import br.com.news.utils.database.beans.CategoriaUsuarioBean;
import br.com.news.utils.database.beans.UsuarioBean;
import br.com.news.utils.database.beans.enums.Perfil;
import br.com.news.web.annotations.Permission;
import br.com.news.web.session.UserSession;

@Permission(profile={Perfil.USUARIO,Perfil.ADMINISTRADOR})
@ViewScoped
@ManagedBean
public class DadosPessoaisMB extends BaseMB {
	
	public static final String ROUTE = "dadosPessoais.xhtml";

	private static final long serialVersionUID = 1L;
	
	@ManagedProperty("#{userSession}")
	private UserSession userSession;
	private UsuarioBean usuario;
	
	private boolean alterarSenha;
	private String novaSenha;

	private List<CategoriaBean> categoriasFavorito;
	private List<CategoriaUsuarioBean> categoriasUsuario;
	
	public DadosPessoaisMB() {

	}
	
	public void buscarCategoriaUsuario() {
		categoriasUsuario = getCategoriaUsuarioservice().buscaCategoriaDoUsuario(usuario.getLogin());
		
		for (CategoriaBean categoria : categoriasFavorito) {
			for (CategoriaUsuarioBean categoriaUsuario : categoriasUsuario) {
				if (categoriaUsuario.getCategoria().getIdCategoria().equals(categoria.getIdCategoria())) {
					categoria.setAdicionaCategoriaUsuario(true);
					categoria.setFlagRecebeEmail(categoriaUsuario.isFlagRecebeEmail());
				}
			}
		}
	}
	
	public void adicionarCategoria(CategoriaBean categoria) {
		CategoriaUsuarioBean categoriaUsuario = new CategoriaUsuarioBean();
		categoriaUsuario.setCategoria(categoria);
		categoriaUsuario.setUsuario(usuario);
		categoriaUsuario.setStatus(true);
		categoriaUsuario.setFlagRecebeEmail(categoria.isFlagRecebeEmail());
		
		getCategoriaUsuarioservice().save(categoriaUsuario);
		
		addInfoMessage("Categoria Salvo com sucesso!");
		carregar();
	}
	
	public void removerCategoria(CategoriaBean categoria) {
		
		for (CategoriaUsuarioBean categoriaUsuario : categoriasUsuario) {
			if (categoria.getIdCategoria().equals(categoriaUsuario.getCategoria().getIdCategoria())) {
				categoriaUsuario.setDataInativacao(new Date());
				getCategoriaUsuarioservice().remove(categoriaUsuario);
				carregar();
				addInfoMessage("Categoria removido com sucesso!");
				return;
			}
		}
	}
	
	public void editar(CategoriaBean categoria) {
		for (CategoriaUsuarioBean categoriaUsuario : categoriasUsuario) {
			if (categoria.getIdCategoria().equals(categoriaUsuario.getCategoria().getIdCategoria())) {
				categoriaUsuario.setFlagRecebeEmail(categoria.isFlagRecebeEmail());
				getCategoriaUsuarioservice().update(categoriaUsuario);
				carregar();
				addInfoMessage("Atualizado com sucesso!");
				return;
			}
		}
	}
	
	@PostConstruct
	public void carregar() {
		alterarSenha = false;
		usuario = userSession.getUsuarioBean();
		categoriasFavorito = getCategoriaService().findCategoriaByStatus(true);
		buscarCategoriaUsuario();
	}
	
	public void alterarSenha() {
		alterarSenha = true;
	}
	
	public void updateSenha() {
		if (usuario.getLogin() == null || usuario.getLogin().equals("")) {
			addErrorMessage("Favor preencher o login!");
			return;
		}
		if (usuario.getNome() == null || usuario.getNome().equals("")) {
			addErrorMessage("Favor preencher o nome!");
			return;
		}
		if (usuario.getEmail() == null || usuario.getEmail().equals("")) {
			addErrorMessage("Favor preencher o email!");
			return;
		}
		if (usuario.getTelefone() == null || usuario.getTelefone().equals("")) {
			addErrorMessage("Favor preencher o telefone!");
			return;
		}
		if (novaSenha != null && !novaSenha.equals("")) {
			if (novaSenha.length() < 6) {
				addErrorMessage("Minimo 6 caracteres exigido para a alteração da senha!");
				return;
			}
			
			usuario.setSenha(novaSenha);
		}
		getUsuarioservice().update(usuario);
		userSession.setUsuarioBean(usuario);
		
		alterarSenha = false;
		
		addInfoMessage("Senha atualizado com sucesso!");
	}
	
	public void alterarDados() {
		if (usuario.getLogin() == null || usuario.getLogin().equals("")) {
			addErrorMessage("Favor preencher o login!");
			return;
		}
		if (usuario.getNome() == null || usuario.getNome().equals("")) {
			addErrorMessage("Favor preencher o nome!");
			return;
		}
		if (usuario.getEmail() == null || usuario.getEmail().equals("")) {
			addErrorMessage("Favor preencher o email!");
			return;
		}
		if (usuario.getTelefone() == null || usuario.getTelefone().equals("")) {
			addErrorMessage("Favor preencher o telefone!");
			return;
		}
		getUsuarioservice().update(usuario);
		
		userSession.setUsuarioBean(usuario);
		addInfoMessage("Dados alterados com sucesso!");
	}
	
	public UserSession getUserSession() {
		return userSession;
	}

	public void setUserSession(UserSession userSession) {
		this.userSession = userSession;
	}

	public boolean isAlterarSenha() {
		return alterarSenha;
	}

	public void setAlterarSenha(boolean alterarSenha) {
		this.alterarSenha = alterarSenha;
	}

	public String getNovaSenha() {
		return novaSenha;
	}

	public void setNovaSenha(String novaSenha) {
		this.novaSenha = novaSenha;
	}

	public List<CategoriaBean> getCategoriasFavorito() {
		return categoriasFavorito;
	}

	public void setCategoriasFavorito(List<CategoriaBean> categoriasFavorito) {
		this.categoriasFavorito = categoriasFavorito;
	}

	public UsuarioBean getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioBean usuario) {
		this.usuario = usuario;
	}
	
}
